home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs25.d81
/
mcplex.bin
/
MUSICPLEX
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2009-10-10
|
17KB
|
474 lines
10 REM"[176][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][174]"
15 REM"[194] 'MUSICPLEX' [194]"
20 REM"[194] CREATED BY DAVE MUSE [194]"
25 REM"[194] 74505,271 [194]"
30 REM"[194]FOR IMPROVED VERSIONS, WRITE [194]"
31 REM"[194] DAVE MUSE, 22443 LEEWRIGHT [194]"
32 REM"[194] SOUTHFIELD, MICH. 48034 [194]"
33 REM"[194] VERSION 1 [194]"
35 REM"[194] REVISION 4.0 [194]"
40 REM"[173][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][189]"
45 REM INITIALIZATION
50 FORHJ=52992TO53019:READDA:POKEHJ,DA:NEXT:POKE768,0:POKE769,207:POKE808,234
90 SW$=" [186][205][175] ":TR$=" [206][205][206] ":PU$=" [186][208][186] ":T1=1:T2=1:MO$="COMPOSE":VW=1
100 POKE53281,1:PRINT"[152][147]":DIMA(599),B(99),C(99),W(3),H(3),L(3),T(599),U(599):GOSUB470
104 Q(6)=21:M(1)=17:M(2)=33:M(3)=65:M(4)=129:M(5)=19:M(6)=21
105 DIMV(30):NM=1:AP=1:RE=1:OC=4:T=50:Q(1)=17:Q(2)=33:Q(3)=65:Q(4)=129:Q(5)=19
106 GOTO6000
110 PRINT"[147] STAND BY, PLEASE...":IFAP+NM<2THENPRINT"[147]PUSH A KEY TO BEGIN..."
112 PRINT"PUSH F5 TO RETURN TO MENU"
115 VB=FB+V(10):VR=RB+(16*V(19))
120 POKE54296,VB:POKE54295,VR:POKE54293,9:DF=V(11)
130 X=1:OO=251
140 DC=V(12):R1=(V(0)*16)+V(1):R2=(V(4)*16)+V(5):R3=(V(13)*16)+V(14)
150 POKE54277,R1:POKE54284,R2:POKE54291,R3
160 S1=(V(2)*16)+V(3):S2=(V(6)*16)+V(7):S3=(V(15)*16)+V(16)
170 POKE54278,S1:POKE54285,S2:POKE54292,S3
190 W(1)=54276:H(1)=54273:L(1)=54272
200 W(2)=54283:H(2)=54280:L(2)=54279:IFM=0THENPOKEL(2),0:L(2)=1025
210 W(3)=54290:H(3)=54287:L(3)=54286:IFM=0THENPOKEH(2),0:H(2)=1026
220 GOSUB540
230 O=V(20)*16
240 IFS$="E"THEN 280
250 IFS$="Y"THEN VF=V(18)*16
260 IFS$="N"THENSO=252:GOTO 310
270 DI=V(21)*16:SO=54294:FT=54299:POKE54290,VW:POKE54286,VF:GOTO315
280 DI=V(21)*16:SO=54294:FT=54300
300 GOTO 315
310 POKE54294,O
315 RETURN
317 REM COMPOSE MODE
320 PRINT"[147]":POKE53265,PEEK(53265)AND239:X=1
330 Z=PEEK(197):IFZ=64THEN 330
340 IFZ=0THENX=X-1:FORTT=1TO500:NEXT:GOTO 330
350 IFZ<7THEN 610
360 A(X)=Z:X=X+1
370 POKE251,C(Z):POKEL(1),C(Z):POKEL(2),C(Z)
380 POKEH(1),B(Z):POKEH(2),B(Z)+DC
390 POKEW(1),Q:POKEW(2),M:POKEW(3),VW
400 FORP=1TO500:FZ=(C(Z)+PEEK(SN))/2:POKEL(1),FZ-DF:POKEL(2),FZ+DF
410 POKESO,ABS(PEEK(FT)-DI)
420 IFP=TTHENPOKEW(3),VW-1
430 IFPEEK(197)<>ZTHEN 450
440 NEXT
450 P=1:POKEW(3),8:POKEW(3),0
460 POKEW(1),Q-1:POKEW(2),M-1:GOTO 330
465 REM NOTE TABLES
470 FORP=1TO99:B(P)=35:C(P)=35:NEXT
480 B(62)=8:B(59)=9:B(9)=9:B(8)=10:B(14)=10:B(17)=11:B(16)=12:B(22)=12
490 B(19)=13:B(25)=14:B(24)=15:B(30)=16:B(33)=17:B(32)=18:B(38)=19:B(35)=20
500 B(41)=21:B(46)=22:B(43)=24:B(49)=25:B(48)=27:B(54)=28
510 C(62)=147:C(59)=21:C(9)=159:C(8)=60:C(14)=205:C(17)=114:C(16)=32:C(22)=216
520 C(19)=156:C(25)=107:C(24)=70:C(30)=47:C(33)=37:C(32)=42:C(38)=63:C(35)=100
530 C(41)=154:C(46)=227:C(43)=63:C(49)=177:C(48)=56:C(54)=214
535 RETURN
540 POKE54275,V(8):POKE54274,7:POKE54282,V(9):POKE54281,7:POKE54289,V(17):POKE54288,7
550 POKE54287,0
560 IFVO$="Y"THEN VF=V(18)*16:POKE54290,VW:POKE54286,VF
570 SN=54299:IFVO$="N"THENSN=251
580 IFVO$="E"THENSN=54300
590 IFVO$="R"THENPOKE54287,VF
600 RETURN
605 REM CHANGES MODES AND OCTAVES
610 POKE53265,PEEK(53265)OR16
620 PRINTTAB(36);"S[157]T[157]A[157]N[157]D[157] [157]B[157]Y[157].[157].[157].[157]C[157]A[157]L[157]C[157]U[157]L[157]A[157]T[157]I[157]N[157]G"
622 IFZM$="[136]"ANDNM=-1ANDAP=-1THENNM=1:AP=1:RETURN
623 IFZM$="[136]"ANDNM=-1THENAP=-1:RETURN
625 IFZM$="[136]"ANDNM=1THENNM=-1:RETURN
630 IFZ=2THENAP=AP*-1
640 IFZ=3THENNM=NM*-1
642 IFZ=4ORZM$="[133]"THENOC=OC+1
643 IFZ=5ORZM$="[134]"THENOC=OC-1
645 FORY=1TO99
650 IFB(Y)=0THEN 690
660 IFZ=4ORZM$="[133]"THENB(Y)=B(Y)*2:C(Y)=INT(C(Y)*2)
670 IFC(Y)>255THENC(Y)=C(Y)-255:B(Y)=B(Y)+1
675 IFZM$="[134]"ORZ=5THEN680
677 GOTO690
680 K=(B(Y)AND1):B(Y)=INT(B(Y)/2):C(Y)=C(Y)+(K*255):C(Y)=INT(C(Y)/2)
690 NEXT:IFZM$="[133]"ORZM$="[134]"THENRETURN
700 IFZ=6THENPRINT"":FORP=1TO10:GETA$:NEXT:RETURN
710 IFAP=-1THEN 1410
720 IFNM=-1THENGOTO 750
730 GOTO 320
745 REM PERFORM MODE
750 A=PEEK(197):IFA=64THEN 750
760 POKE160,0:POKE161,0:POKE162,0:X=1:PRINT"[147]":POKE53265,PEEK(53265)AND239
770 IFA(X)=0THENZ=6:GOTO610
775 A=PEEK(197):IFA=64THEN 775
780 T(X)=TI:IFA<7THENZ=A:GOTO 610
790 Z=A(X):POKEOO,C(Z):POKEH(1),B(Z):POKEH(2),B(Z)+DC:POKEW(1),Q:POKEW(2),M:POKEW(3),VW
800 FZ=(C(Z)+PEEK(SN))/2:POKEL(1),FZ-DF:POKEL(2),FZ+DF:P=P+1:POKESO,ABS(PEEK(FT)-DI)
810 IFP=TTHENPOKEW(3),VW-1
820 IFPEEK(197)<>ATHENP=1:POKEW(3),8:POKEW(3),0:POKEW(1),Q-1:POKEW(2),M-1:U(X)=TI:X=X+1:GOTO770
830 GOTO 800
840 RETURN
990 REM ERROR TRAP
1000 POKE53265,PEEK(53265)OR16
1010 PRINT"[147] CRASH!!!"
1020 PRINT" PLEASE ALTER CONTROL SETTINGS FOR PROPER OPERATION."
1030 FORHJ=1TO5000:NEXT:POKE198,0:GOTO6000
1400 REM PERFORMS PLAYBACK
1410 FORG=1TO10:GETA$:NEXT
1420 A=PEEK(197):IFA=64THEN 1420
1430 POKE160,0:POKE161,0:POKE162,0:X=1:PRINT"[147]":POKE53265,PEEK(53265)AND239
1440 IFT(X)=0THENZ=6:GOTO610
1445 IFTI*RE<T(X)ANDPEEK(197)>7THEN1445
1450 IFPEEK(197)<7THENZ=PEEK(197):GOTO 610
1460 Z=A(X):POKEOO,C(Z):POKEH(1),B(Z):POKEH(2),B(Z)+DC:POKEW(1),Q:POKEW(2),M:POKEW(3),VW
1470 FZ=(C(Z)+PEEK(SN))/2:POKEL(1),FZ-DF:POKEL(2),FZ+DF:P=P+1:POKESO,ABS(PEEK(FT)-DI)
1480 IFP=TTHENPOKEW(3),VW-1
1490 IFTI*RE>U(X)THENP=1:POKEW(3),8:POKEW(3),0:POKEW(1),Q-1:POKEW(2),M-1:X=X+1:GOTO1440
1500 GOTO 1470
1510 PRINTPEEK(197):GOTO 1510
1590 REM CONTROL PANEL 1
1600 GT$="[213][219][178][178][219][178][178][219][178][178][219][178][178][219][178][178][219][201]"
1610 GM$="[171][178][178][178][178][178][178][178][178][178][178][178][178][178][178][178][178][179]"
1620 GB$="[202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"
1630 SC$(1)=" 0 3 6 9 12 15"
1640 SC$(2)=" 0 50 100 150 255"
1645 PRINT"[147]":POKE53281,0:POKE53280,0
1650 IFP$=PR$THEN1770
1655 PRINT"[158]";SC$(1);""
1660 PRINTGT$:AW=V(0):GOSUB2000:PRINT"[145][194]ATTACK1[194]"
1670 PRINTGM$:AW=V(1):GOSUB2000:PRINT"[145][194]DECAY1[194]"
1680 PRINTGM$:AW=V(2):GOSUB2000:PRINT"[145][194]SUSTAIN1[194]"
1690 PRINTGM$:AW=V(3):GOSUB2000:PRINT"[145][194]RELEASE1[194]"
1700 PRINTGM$:AW=V(4):GOSUB2000:PRINT"[145][194]ATTACK2[194]"
1710 PRINTGM$:AW=V(5):GOSUB2000:PRINT"[145][194]DECAY2[194]"
1720 PRINTGM$:AW=V(6):GOSUB2000:PRINT"[145][194]SUSTAIN2[194]"
1730 PRINTGM$:AW=V(7):GOSUB2000:PRINT"[145][194]RELEASE2[194]"
1740 PRINTGM$:AW=V(8):GOSUB2000:PRINT"[145][194]PULSEW1[194]"
1750 PRINTGM$:AW=V(9):GOSUB2000:PRINT"[145][194]PULSEW2[194]"
1760 PRINTGM$:AW=V(10):GOSUB2000:PRINT"[145][194]VOLUME[194]":PRINTGB$
1762 PRINT"USE F-KEYS OR JOYSTICK::H-HELP::M-MENU";
1765 IFP$=PL$THENRETURN
1770 PRINT"";:PRINTTAB(21)"[158]";SC$(1);""
1775 PRINTTAB(21);GT$
1780 PRINTTAB(21);:AW=V(11):GOSUB2000:PRINTTAB(21)"[145][194]PHASING[194]"
1790 PRINTTAB(21);GM$
1800 PRINTTAB(21);:AW=V(12):GOSUB2000:PRINTTAB(21)"[145][194]DISSONANCE[194]"
1810 PRINTTAB(21);GM$
1820 PRINTTAB(21);:AW=V(13):GOSUB2000:PRINTTAB(21)"[145][194]SPFXATTACK[194]"
1830 PRINTTAB(21);GM$
1840 PRINTTAB(21);:AW=V(14):GOSUB2000:PRINTTAB(21)"[145][194]SPFXDECAY[194]"
1850 PRINTTAB(21);GM$
1860 PRINTTAB(21);:AW=V(15):GOSUB2000:PRINTTAB(21)"[145][194]SPFXSUSTAIN[194]"
1870 PRINTTAB(21);GM$
1880 PRINTTAB(21);:AW=V(16):GOSUB2000:PRINTTAB(21)"[145][194]SPFXRELEASE[194]"
1890 PRINTTAB(21);GM$
1900 PRINTTAB(21);:AW=V(17):GOSUB2000:PRINTTAB(21)"[145][194]SPFXPULSEW[194]"
1910 PRINTTAB(21);GM$
1920 PRINTTAB(21);:AW=V(18):GOSUB2000:PRINTTAB(21)"[145][194]SPFXFREQ[194]"
1930 PRINTTAB(21);GM$
1940 PRINTTAB(21);:AW=V(19):GOSUB2000:PRINTTAB(21)"[145][194]FILTRESONANCE[194]"
1950 PRINTTAB(21);GM$
1960 PRINTTAB(21);:AW=V(20):GOSUB2000:PRINTTAB(21)"[145][194]FILTFREQ[194]"
1965 PRINTTAB(21);GM$
1970 PRINTTAB(21);:AW=V(21):GOSUB2000:PRINTTAB(21)"[145][194]FILTMODDIR[194]"
1985 PRINTTAB(21);GB$
1990 RETURN
1995 REM ARROW
2000 PRINT"[145]";:FORI=0TOAW:PRINT"";:NEXT:PRINT"[157] [157][157][145]";"[158]^[157][194]":RETURN
2500 PL$="[159][169][146][157][223]":ES$=" [157] ":PR$="[159][223][157][146][169]"
2510 GOSUB1600:GOSUB1770
2520 PRINT"[159]";TAB(19)PL$:P$=PL$:PR=1
2525 IFPEEK(197)<8THEN2535
2530 GETZM$:JV=PEEK(56320)AND15:JF=PEEK(56320)AND16:IFJV=15ANDZM$=""THEN2530
2532 IFJFTHEN2535
2533 JV=JV+100
2535 POKE214,PR:POKE211,19:SYS58732:PRINTES$
2540 IFZM$="[133]"ORJV=14THENIFPR>1THENPR=PR-2
2550 IFZM$="[134]"ORJV=13THENIFPR<21THENPR=PR+2
2560 IFZM$="[135]"ORJV=11THENP$=PL$:IFV(PR/2)<15THENV(PR/2)=V(PR/2)+1
2570 IFZM$="[139]"ORJV=111THENP$=PL$:IFV(PR/2)>0THENV(PR/2)=V(PR/2)-1
2580 IFZM$="[140]"ORJV=107THENP$=PR$:IFV((PR/2)+11)>0THENV((PR/2)+11)=V((PR/2)+11)-1
2590 IFZM$="[136]"ORJV=7THENP$=PR$:IFV((PR/2)+11)<15THENV((PR/2)+11)=V((PR/2)+11)+1
2592 IFZM$="H"ANDP$=PL$THENPOKE56325,0:POKE56324,28:GOSUB8010:POKE56325,57:GOSUB1600:GOSUB1770
2593 IFZM$="H"ANDP$=PR$THENPOKE56325,0:POKE56324,28:GOSUB8260:POKE56325,57:GOSUB1600:GOSUB1770
2595 IFZM$="M"THEN RETURN
2600 POKE214,PR:POKE211,19:SYS58732:PRINTP$
2610 GOSUB1650:GOTO2525
4980 REM CONTROL PANEL 2
4992 PRINT"[147]"
4995 PRINT" [213][195][195][195][195][195][195][195][195][201] [213][195][201]"
5000 PRINT" MODE [194] [194] F7 TO CHANGE [194]M[194] [202][195][195][195][195][195][195][195][195][203]";
5005 PRINT" [194] [194]"
5010 PRINT" [213][195][195][195][195][201] [194]F[194]"
5020 PRINT" PLAYBACK RATE[194] [194] PUSH + OR - [194]O[194] [202][195][195][195][195][203]";
5025 PRINT" [194]R[194]"
5030 PRINT" [213][195][195][195][195][195][195][195][195][201] [194] [194]"
5040 PRINT" FILTER [194] [194] F TO CHANGE [194]M[194] TYPE [202][195][195][195][195][195][195][195][195][203]";
5045 PRINT" [194]E[194]"
5050 PRINT" [213][195][195][195][195][195][201] [194]N[194]"
5060 PRINT" FILTER MODU [194] [194] C TO CHANGE [194]U[194] [202][195][195][195][195][195][203]";
5065 PRINT" [194]:[194]"
5070 PRINT" [213][195][195][195][195][195][201] [194]:[194]"
5080 PRINT" VIBRATO [194] [194] V TO CHANGE [194]H[194] [202][195][195][195][195][195][203]";
5085 PRINT" [194] [194]"
5090 PRINT" [213][195][195][195][195][195][178][195][195][195][195][201] [194]F[194]"
5100 PRINT" VOICE 1[194] [194] [194] PUSH 1:PUSH Q [194]O[194]"
5110 PRINT" VOICE 2[194] [194] [194] PUSH 2:PUSH W [194]R[194]"
5120 PRINT" [202][195][195][195][195][195][177][195][195][195][195][203] [194] [194]"
5130 PRINT" [213][195][195][195][201] [194]H[194]"
5140 PRINT" SPFX ENVP LOOP[194] [194] PUSH < OR > [194]E[194]"
5150 PRINT" [202][195][195][195][203] [194]L[194]"
5160 PRINT" [213][195][195][201] [194]P[194]"
5170 PRINT" OCTAVE [194] [194] F1 UP:F3 DOWN [202][195][203]"
5180 PRINT" [202][195][195][203]":GOSUB5500
5190 GET ZM$:IF ZM$=""THEN5190
5192 IFZM$="[133]"ORZM$="[134]"ORZM$="[136]"THENPRINT"[150]";:GOSUB620:PRINT"";
5195 IFZM$="H"THENPOKE56325,0:POKE56324,28:GOSUB8520:POKE56325,57
5200 IFZM$="F"THENF=F+1:IFF=4THENF=0
5210 IFZM$="+"THENRE=RE+.1
5215 IFZM$="-"THENRE=RE-.1
5220 IFZM$="."THENT=T+5
5225 IFZM$=","THENT=T-5
5230 IFZM$="1"THENQ=Q(IC):IC=IC+1:IFIC=7THENIC=0
5235 IFZM$="2"THENM=M(ID):ID=ID+1:IFID=7THENID=0
5240 IFZM$="V"THENVV=VV+1:IFVV=8THENVV=0
5245 IFZM$="Q"THENT1=T1*-1
5246 IFZM$="W"THENT2=T2*-1
5250 IFZM$="C"THENCC=CC+1:IFCC=8THENCC=0
5252 IFCC=0THENS$="N":D$=" OFF "
5254 IFCC=1THENS$="Y":VW=17
5256 IFCC=2THENS$="Y":VW=33
5258 IFCC=3THENS$="Y":VW=65
5260 IFCC=4THENS$="Y":VW=129
5262 IFCC=5THENS$="Y":VW=19
5264 IFCC=6THENS$="Y":VW=21
5266 IFCC=7THENS$="E":D$="ENVLP"
5268 IFVV=0THENVO$="N":E$=" OFF "
5270 IFVV=1THENVO$="Y":VW=17
5272 IFVV=2THENVO$="Y":VW=33
5274 IFVV=3THENVO$="Y":VW=65
5276 IFVV=4THENVO$="Y":VW=129
5277 IFVV=5THENVO$="Y":VW=19
5278 IFVV=6THENVO$="R":VW=21
5279 IFVV=7THENVO$="E":E$="ENVLP"
5280 IFVW=17THENC$=TR$
5282 IFVW=33THENC$=SW$
5284 IFVW=65THENC$=PU$
5286 IFVW=129THENC$="NOISE"
5287 IFVW=19THENC$="SYNC "
5288 IFVW=21THENC$="R MOD"
5289 IFCC>0ANDCC<7THEND$=C$
5290 IFVV>0ANDVV<7THENE$=C$
5295 IFZM$="M"THEN RETURN
5300 GOTO4995
5500 IFAP=1ANDNM=1THENMO$="COMPOSE "
5502 IFAP=1ANDNM=-1THENMO$="PERFORM "
5504 IFAP=-1ANDNM=-1THENMO$="PLAYBACK"
5510 PRINT"";MO$;""
5520 PRINT"";RE;""
5525 IFF=0THENFT$=" LOPASS ":FB=16+128
5526 IFF=1THENFT$="BANDPASS":FB=32+128
5527 IFF=2THENFT$=" HIPASS ":FB=64+128
5528 IFF=3THENFT$=" NOTCH ":FB=64+16
5530 PRINT"";FT$;""
5540 PRINT"";OC;""
5550 PRINT"";T;""
5560 IFQ=17THENQ$=TR$
5562 IFQ=19THENQ$="SYNC "
5564 IFQ=21THENQ$="R MOD"
5566 IFQ=33THENQ$=SW$
5568 IFQ=65THENQ$=PU$
5570 IFQ=129THENQ$="NOISE"
5572 IFQ=0THENQ$=" OFF "
5575 IFT1=1THENQ$=Q$+"_[195][195][195]"
5576 IFT1=-1THENQ$=Q$+"FIL_"
5580 PRINT"";Q$;""
5590 IFM=17THENQ$=TR$
5592 IFM=19THENQ$="SYNC "
5594 IFM=21THENQ$="R MOD"
5596 IFM=33THENQ$=SW$
5598 IFM=65THENQ$=PU$
5600 IFM=129THENQ$="NOISE"
5610 IFM=0THENQ$=" OFF "
5615 IFT2=1THENQ$=Q$+"_[195][195][195]"
5616 IFT2=-1THENQ$=Q$+"FIL_"
5620 PRINT"";Q$;""
5630 PRINT"";D$;""
5640 PRINT"";E$;""
5700 IFT1=1ANDT2=1THENRB=12
5710 IFT1=-1ANDT2=1THENRB=13
5715 IFT1=1ANDT2=-1THENRB=14
5720 IFT1=-1ANDT2=-1THENRB=15
5900 RETURN
5990 REM MAIN MENU
6000 POKE808,234:POKE198,0:POKE53281,1:PRINT"[147][144] M U S I C P L E X V . 1 ."
6010 PRINT"[159]YOUR OPTIONS:"
6020 PRINT" 1) PARAMETER CONTROL
6030 [153]" 2) STATUS CONTROL
6040 PRINT" 3) SAVE SOUND/SONG TO DISK
6045 [153]" 4) LOAD SOUND/SONG FROM DISK
6050 PRINT" 5) ENTER ";MO$;" MODE"
6060 PRINT" 6) HELP
6065 [153]" 7) EXIT THE PROGRAM
6070 GETZM$:IFZM$=""THEN6070
6080 IFZM$="1"THENP$=PL$:GOSUB2500:GOTO6000
6090 IFZM$="2"THENZM$="":GOSUB5192:GOTO6000
6100 IFZM$="3"THENGOSUB7000:ZM$="":GOTO6000
6103 IFZM$="4"THENGOSUB7000:ZM$="":GOSUB5192:GOTO6000
6105 IFZM$="5"ANDAP+NM<2THENZM$="":PRINT"[147]":GOSUB110:GOSUB710:GOTO6000
6110 IFZM$="5"THENZM$="":GOSUB110:GOSUB320:GOTO6000
6112 IFZM$="6"THENZM$="":POKE56325,0:POKE56324,28:GOSUB7610:POKE56325,57:GOTO6000
6114 IFZM$="7"THENPOKE808,237
6115 IFZM$="7"THENPRINT"[147]TO RE-ENTER, TYPE 'CONT'":PRINT"THEN PUSH 'RETURN' WHEN";:END
6120 PRINT" SORRY, THAT KEY DOESN'T DO ANYTHING!":FOR G=1TO 2000:NEXT
6200 GOTO6000
7000 POKE808,237:ZD$="LOAD":IF ZM$="3"THEN ZD$="SAVE"
7010 PRINT" WILL YOU ";ZD$;" A S[146]OUND"
7020 PRINT" OR A T[146]UNE?"
7030 GETZE$:IFZE$=""THEN7030
7032 IFZE$<"S"ORZE$>"T"THEN RETURN
7035 INPUT" WHAT IS THE TITLE";ZT$
7040 IFZE$="S"ANDZM$="3"THEN7100
7050 IFZE$="S"ANDZM$="4"THEN7200
7060 IFZE$="T"ANDZM$="3"THEN7300
7070 IFZE$="T"ANDZM$="4"THEN7400
7100 OPEN2,8,2,"0:"+ZT$+",S,W"
7110 PRINT#2,CC:PRINT#2,F:PRINT#2,M:PRINT#2,OC:PRINT#2,Q:PRINT#2,T:PRINT#2,T1:PRINT#2,T2:PRINT#2,VV:PRINT#2,IC:PRINT#2,ID
7120 FORTT=0TO30:PRINT#2,V(TT):NEXTTT
7130 CLOSE2
7140 RETURN
7200 OPEN2,8,2,"0:"+ZT$+",S,R"
7210 INPUT#2,CC,F,M,OD,Q,T,T1,T2,VV,IC,ID
7220 FORTT=0TO30:INPUT#2,V(TT):NEXTTT
7230 CLOSE2
7240 IFOD>OCTHENZM$="[133]":PRINT"[147]":GOSUB620:GOTO7240
7250 IFOD<OCTHENZM$="[134]":PRINT"[147]":GOSUB620:GOTO7250
7260 RETURN
7300 OPEN2,8,2,"0:"+ZT$+",S,W"
7310 PRINT#2,RE
7320 FORTT=1TO599:PRINT#2,A(TT):PRINT#2,T(TT):PRINT#2,U(TT)
7330 IFT(TT)=0THENTT=600
7340 NEXTTT
7350 CLOSE2
7360 RETURN
7400 OPEN2,8,2,"0:"+ZT$+",S,R"
7410 INPUT#2,RE
7420 FORTT=1TO599:INPUT#2,A(TT),T(TT),U(TT)
7430 IFT(TT)=0THENTT=600
7440 NEXTTT
7450 CLOSE2
7460 RETURN
7500 DATA16,3,76,139,227,142,13,3,169,232,133,20,169,3,133,21,162,250
7510 DATA154,169,167,72,169,233,72,76,163,168
7600 REM HELP SCREENS
7610 PRINT"[147][146] ";
7620 PRINT" 'MUSICPLEX' IS A MUSIC SYNTHESIZING,";
7630 PRINT" COMPOSING, PERFORMING, AND RECORDING ";
7640 PRINT" TOOL. ";
7650 PRINT" ";
7660 PRINT" ALL THREE OF THE SOUND CHIP'S VOICES ";
7670 PRINT" MAY BE COMBINED TO CREATE COMPLEX ";
7680 PRINT" OUTPUTS. A MELODY LINE CAN BE RECORDED,";
7690 PRINT" EDITED, RE-PERFORMED FROM STORED NOTES,";
7700 PRINT" AND PLAYED BACK AT VARIOUS TEMPOS AND ";
7710 PRINT" WITH DIFFERENT VOICES. ";
7720 PRINT" ";
7730 PRINT" BEFORE THE PROGRAM CAN BE USED, A VOICE";
7740 PRINT" MUST BE CREATED (ITEMS 1 AND 2 ON THE ";
7750 PRINT" MENU TAKE YOU TO THE SCREENS FOR CREA- ";
7760 PRINT" TING VOICES) OR LOADED FROM DISK (ITEM ";
7770 PRINT" 4 ON THE MENU). ";
7780 PRINT" ";
7790 PRINT" ITEM 5 ENTERS THE ACTIVE MODE, SELECTED";
7800 PRINT" FROM THE STATUS SCREEN. ";
7810 FORDY=1TO10:NEXT:PRINT"[147][146] ";
7820 PRINT" IN COMPOSE MODE, A TUNE MAY BE PLAYED ";
7830 PRINT" USING THE TOP TWO ROWS OF KEYS AS YOUR ";
7840 PRINT" KEYBOARD. NOTES PLAYED ARE STORED FOR ";
7850 PRINT" LATER MANIPULATION. PUSHING 'DELETE' ";
7860 PRINT" FOLLOWING A BAD NOTE ERASES IT FROM ";
7870 PRINT" MEMORY. ";
7880 PRINT" ";
7890 PRINT" IN PERFORM MODE, STORED NOTES MAY BE ";
7900 PRINT" PLAYED BACK, ONE AT A TIME, BY PUSHING ";
7910 PRINT" ANY KEY OR JOYSTICK. YOUR PERFORMANCE ";
7920 PRINT" IS STORED FOR LATER PLAYBACK. ";
7930 PRINT" ";
7940 PRINT" IN PLAYBACK MODE, YOUR TUNE, OR ONE ";
7950 PRINT" LOADED FROM DISK (ITEM 4 ON THE MENU) ";
7960 PRINT" WILL BE REPLAYED AT THE TEMPO SELECTED ";
7970 PRINT" ON THE STATUS SCREEN. ";
7980 PRINT" ";
7990 PRINT" ITEM 3 ON THE MENU WILL SAVE SOUNDS OR ";
8000 PRINT" TUNES YOU HAVE CREATED TO DISK.":FORDY=1TO30:NEXT:PRINT"[147]":RETURN
8010 PRINT"[147][146] ";
8020 PRINT" CONTROLS ON THE LEFT SIDE OF THE SCREEN";
8030 PRINT" SET THE ADSR AND PULSE WIDTHS OF VOICES";
8040 PRINT" ONE AND TWO. ADSR REFERS TO THE PARA- ";
8050 PRINT" METERS OF THE ENVELOPES (THEY CONTROL ";
8060 PRINT" THE AMPLITUDE OF THE WAVEFORMS OVER ";
8070 PRINT" TIME). ";
8080 PRINT" ";
8090 PRINT" nm_cDECAY TIME ";
8100 PRINT" n [183][183][183][183]m ";
8110 PRINT" n ^ m _cRELEASE TIME ";
8120 PRINT" ^ b ";
8130 PRINT" b SUSTAIN LEVEL ";
8140 PRINT" b ";
8150 PRINT" ATTACK TIME ";
8160 PRINT" ";
8170 PRINT" ENVELOPES FOR BOTH VOICES CAN DIFFER ";
8180 PRINT" AND OVERLAP FOR INTERESTING EFFECTS. ";
8190 PRINT" ";
8200 PRINT" PULSE WIDTH SETTINGS [186][186][186][186][186][186][186][186][175] LOW ";
8210 PRINT" AFFECT THE SYMMETRY ";
8220 PRINT" OF THAT WAVEFORM [186]p[186]p[186]p[186]p[175] MEDIUM ";
8230 PRINT" WHEN SELECTED FROM ";
8240 PRINT" THE STATUS SCREEN. [186][183][183]p[186][183][183]p[175] HIGH ";
8250 FORDY=1TO35:NEXT:PRINT" [147] ";:POKE198,0:RETURN
8260 PRINT"[147][146] ";
8270 PRINT" CONTROLS ON THE RIGHT SIDE OF THE ";
8280 PRINT" SCREEN ARE FOR VARIOUS SPECIAL EFFECTS.";
8290 PRINT" PHASING AND DISSONANCE SET SMALL AND ";
8300 PRINT" LARGE FREQUENCY DIFFERENCES, RESPECT- ";
8310 PRINT" IVELY, BETWEEN VOICES ONE AND TWO. ";
8320 PRINT" ";
8330 PRINT" SPFX ADSR AND FREQUENCY CONTROLS ARE ";
8340 PRINT" FOR VOICE THREE, WHICH CAN BE SELECTED ";
8350 PRINT" TO MODULATE VOICES ONE AND TWO OR THE ";
8360 PRINT" FILTER FROM THE STATUS SCREEN. ";
8370 PRINT" ";
8380 PRINT" THE CUTOFF FREQUENCY OF THE FILTER, AND";
8390 PRINT" ITS RESONANCE (THE SHARPNESS OF THE ";
8400 PRINT" ROLLOFF OF REJECTED FREQUENCIES) MAY ";
8410 PRINT" BE SET FOR THOSE VOICES ROUTED THROUGH ";
8420 PRINT" THE FILTER. ";
8440 PRINT" FILTER MODULATION DIRECTION SETS THE ";
8450 PRINT" DIRECTION OF THE FREQUENCY SWEEP WHEN ";
8460 PRINT" FILTER MODULATION HAS BEEN SET FROM THE";
8470 PRINT" STATUS SCREEN. ";
8480 PRINT" ";
8490 PRINT" SOME COMBINATIONS OF CONTROL SETTINGS ";
8500 PRINT" MAY CREATE AN ERROR CONDITION, SENDING ";
8510 PRINT" YOU TO THE MAIN MENU.";:FORDY=1TO40:NEXT:PRINT"[147]":P$=PL$:POKE198,0:RETURN
8520 PRINT"[147][146] ";
8530 PRINT" WAVEFORMS, MODES, OCTAVES, AND SPECIAL ";
8540 PRINT" EFFECTS CAN BE SET FROM THIS SCREEN. ";
8550 PRINT" ";
8560 PRINT" PLAYBACK RATE IS EFFECTIVE IN PLAYBACK ";
8570 PRINT" MODE ONLY. ";
8580 PRINT" ";
8590 PRINT" WHEN VIBRATO AND FILTER MODULATION ARE ";
8600 PRINT" BOTH SET, ONLY ONE MODULATION WAVEFORM ";
8610 PRINT" MAY BE USED, UNLESS ONE IS CONTROLLED ";
8620 PRINT" BY THE ENVELOPE OF THE SPFX VOICE. ";
8630 PRINT" ";
8640 PRINT" THE VOICE SELECTOR DISPLAYS THE WAVE- ";
8650 PRINT" FORM BY ITS SHAPE. RINGMOD AND SYNC ARE";
8660 PRINT" SPECIAL EFFECTS THAT LINK VOICES TO- ";
8670 PRINT" GETHER TO MAKE UNUSUAL SOUNDS. THE ";
8680 PRINT" ARROW INDICATES IF THE VOICE IS ROUTED ";
8690 PRINT" THROUGH THE FILTER. ";
8700 PRINT" ";
8710 PRINT" SPFX LOOP IS A DELAY LOOP THAT DETER- ";
8720 PRINT" MINES THE LENGTH OF THE SUSTAIN PHASE ";
8730 PRINT" OF THE SPFX VOICE'S ENVELOPE. ";
8740 PRINT" ";
8750 PRINT" CHANGING OCTAVES TAKES A FEW SECONDS. ";
8760 FORDY=1TO40:NEXT:PRINT"[147]":POKE198,0:RETURN